﻿using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;

namespace Planning.Forms {
    public partial class planningForm : Form {
        #region contruct
        private int idMembre;
        private bool formateur;
        private formationBulle[] formation;
        private int totalFormation;
        public planningForm() {
            InitializeComponent();
        }
        public planningForm(int idMembre, bool formateur)
        {
            InitializeComponent();
            this.idMembre = idMembre;
            this.formateur = formateur;
            
            using (SqlConnection connexion = new SqlConnection("user id=" + Properties.Settings.Default.userBase + "; " +
                    "password=" + Properties.Settings.Default.pwdBase + "; " +
                    "server=" + Properties.Settings.Default.adrBase + "; " +
                    "database=" + Properties.Settings.Default.nomBase + "; " +
                    "connection timeout=30")) 
            {
                try {
                    using (SqlCommand cmd = connexion.CreateCommand()) {
                        cmd.CommandText = "SELECT idActivite, libelleActivite FROM ACTIVITE";
                        cmd.Connection.Open();

                        DataTable res = new DataTable();
                        res.Load(cmd.ExecuteReader());

                        this.activiteCombo.DataSource = res;
                        this.activiteCombo.ValueMember = "idActivite";
                        this.activiteCombo.DisplayMember = "libelleActivite";
                    }
         
                } catch(SqlException ex) {
                    if (Properties.Settings.Default.erreurSql)
                    {
                       MessageBox.Show("Erreur lors de la récupération de la liste des activité. \n\n" + ex, "Erreur !", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                        return;
                    }
                    else
                    {
                        MessageBox.Show("Erreur lors de la récupération de la liste des activité.", "Erreur !", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                        return;
                    }
                } finally {
                    connexion.Close();
                }
            }

        
            test();
        }
        #endregion

        #region evenements
        protected override void OnFormClosing(FormClosingEventArgs e) {
            Environment.Exit(0);
        }

        private void panelCalendar_DoubleClick(object sender, EventArgs e) {
            MessageBox.Show(this.date.Value.ToString());
            Point point = this.panelCalendar.PointToClient(Cursor.Position);
            int heure = point.Y / 32 + Properties.Settings.Default.ouverture;

            ajoutFormation form = new ajoutFormation(heure);
            form.Show();
        }

        private void activiteCombo_SelectedIndexChanged(object sender, EventArgs e) {
            this.activiteCombo.Text = "Test";
            this.getFormateur();
        }
        #endregion

        public void test() {
            // Ouverture de la connexion
            using (SqlConnection connexion = new SqlConnection("user id=" + Properties.Settings.Default.userBase + "; " +
                    "password=" + Properties.Settings.Default.pwdBase + "; " +
                    "server=" + Properties.Settings.Default.adrBase + "; " +
                    "database=" + Properties.Settings.Default.nomBase + "; " +
                    "connection timeout=30"))
            {
                try {
                    // Fermeture du curseur si la connection est déja établi
                    if (connexion.State == ConnectionState.Open) {
                        connexion.Close();
                    }

                    using (SqlCommand cmd = connexion.CreateCommand()) {
                        // Exécute la requête
                        cmd.CommandText = "SELECT COUNT(idFormation) FROM FORMATION";
                        cmd.Connection.Open();

                        SqlDataReader reader = cmd.ExecuteReader();
                        this.totalFormation = 0;
                        while(reader.Read()) {
                            this.totalFormation = (int)reader[0];
                        }
                        this.formation = new formationBulle[this.totalFormation];

                        cmd.Connection.Close();


                        // Prépare la requête
                        cmd.CommandText = "SELECT idFormation, DATEPART(hour, dateFormation) as heure, libelleFormation FROM FORMATION ORDER BY heure asc;";
                        // Exécute la requête
                        cmd.Connection.Open();
                        // Initialise un tableau et stocke les résultats de la requête
                        DataTable res = new DataTable();
                        res.Load(cmd.ExecuteReader());

                        int i = Properties.Settings.Default.ouverture;
                        int j = 0;
                        int cpt = 0;
                    
                        foreach (DataRow row in res.Rows) {
                            if (String.Compare (row["heure"].ToString(), (i).ToString()) == 0) {
                                int x = (i - Properties.Settings.Default.ouverture) * Properties.Settings.Default.hauteurBouton;
                                int y = (j * (Properties.Settings.Default.decalageBouton + Properties.Settings.Default.largeurBouton)) + Properties.Settings.Default.decalageInitBouton;

                                this.formation[cpt] = new formationBulle(x, y, row["libelleFormation"].ToString(), Convert.ToInt32(row["idFormation"].ToString()), this.idMembre);
                                this.panelCalendar.Controls.Add(this.formation[cpt]);
                                
                                cpt++;
                                j++;
                            }
                            else {
                                i = int.Parse(row["heure"].ToString());
                                j = 0;

                                int y = Properties.Settings.Default.decalageInitBouton;
                                int x = (i - Properties.Settings.Default.ouverture) * Properties.Settings.Default.hauteurBouton;

                                this.formation[cpt] = new formationBulle(x, y, row["libelleFormation"].ToString(), Convert.ToInt32(row["idFormation"].ToString()), this.idMembre);
                                this.panelCalendar.Controls.Add(this.formation[cpt]);
                                
                                cpt++;
                                j++;
                            }  
                        }
                    }
                }
                catch (SqlException ex)
                {
                    if (Properties.Settings.Default.erreurSql)
                    {
                        MessageBox.Show("Echec de connexion à la base de données..." + ex, "Erreur !", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                        return;
                    }
                    else
                    {
                        MessageBox.Show("Echec de connexion à la base de données...\n\nVérifier les paramètres", "Erreur !", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                        return;
                    }
                }
            }
        }

 

        #region getFormateur 
        private void getFormateur() {
             using (SqlConnection connexion = new SqlConnection("user id=" + Properties.Settings.Default.userBase + "; " +
                    "password=" + Properties.Settings.Default.pwdBase + "; " +
                    "server=" + Properties.Settings.Default.adrBase + "; " +
                    "database=" + Properties.Settings.Default.nomBase + "; " +
                    "connection timeout=30"))
            {
                try {

                    using (SqlCommand cmd = connexion.CreateCommand())
                    {
                        cmd.CommandText = "SELECT idMembre, nomMembre FROM MEMBRE, COMPETENCE_FORMATEUR, ACTIVITE WHERE MEMBRE.idMembre = COMPETENCE_FORMATEUR.idFormateur AND COMPETENCE_FORMATEUR.idActivite = @id GROUP BY idMembre, nomMembre;";
                        cmd.Parameters.AddWithValue("@id", this.activiteCombo.SelectedValue.ToString());
                        cmd.Connection.Open();

                        DataTable res = new DataTable();
                        res.Load(cmd.ExecuteReader());

                        this.formateurCombo.DataSource = res;
                        this.formateurCombo.ValueMember = "idMembre";
                        this.formateurCombo.DisplayMember = "nomMembre";
                    }

                } catch(SqlException ex) {
                    if (Properties.Settings.Default.erreurSql)
                    {
                        MessageBox.Show("Erreur lors de la récupération des formateurs. \n\n" +ex, "Erreur !", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                        return;
                    }
                    else
                    {
                        MessageBox.Show("Erreur lors de la récupération des formateurs.", "Erreur !", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                        return;
                    }
                }
                 finally {
                     connexion.Close();
                }
            }
        }

        #endregion

        #region Getters
        public int getIdMembre() {
            return this.idMembre;
        }
        #endregion
    }
}

